#include<bits/stdc++.h>
using namespace std;

char graph[50][50];
int vis_land[50][50];
int vis_marine[50][50];

int m,n;
int dx[]={-1,1,0,0,-1,1,1,-1};
int dy[]={0,0,-1,1,1,1,-1,-1};
void dfs1(int i,int j,int vis_marine[50][50],char graph[50][50])
{
	vis_marine[i][j]=1;
	for(int k=0;k<8;k++)
	{
		int x=i+dx[k],y=j+dy[k];
		if(x>=0 &&x<m &&y>=0 &&y<n &&graph[x][y]=='0' &&vis_marine[x][y]==0)
		{
			dfs1(x,y,vis_marine,graph);
		}
	}
}

void dfs2(int i,int j,int vis_land[50][50],char graph[50][50])
{
	vis_land[i][j]=1;
	for(int k=0;k<4;k++)
	{
		int x=i+dx[k],y=j+dy[k];
		if(x>=0 &&x<m &&y>=0 &&y<n &&graph[x][y]=='1' &&vis_land[x][y]==0)
		{
			dfs2(x,y,vis_land,graph);
		}
	}
}
int main()
{

	int t;
	cin>>t;
	while(t--)
	{
		
	    int sum=0;
		cin>>m>>n;
		for(int i=0;i<m;i++)//覆盖数据
		{
			for(int j=0;j<n;j++)
			{
				cin>>graph[i][j];
			}
		}
		memset(vis_marine,0,sizeof(vis_marine));//清零标志
		memset(vis_land,0,sizeof(vis_land));
		
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++)
			{
				if((i==0 ||i==m-1 ||j==0 ||j==n-1) &&graph[i][j]=='0'&&vis_marine[i][j]==0)//找到外海
				{
					dfs1(i,j,vis_marine,graph);
				}
			}
		}
		
		
		

		for(int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(graph[i][j]=='0' &&vis_marine[i][j]==1)
				{
					for(int k=0;k<4;k++)
					{
						int x=i+dx[k],y=j+dy[k];
						if(x>=0 &&x<m &&y>=0 &&y<n &&graph[x][y]=='1' &&vis_land[x][y]==0)//根据外海找外岛
						{
							sum++;
							dfs2(x,y,vis_land,graph);
						}
					}
				}
			}
		}
	    cout<<sum<<endl;
	}

	
	return 0;
}